<?php
/**
 * 网络请求类
 * User: 小菜鸟儿
 * Email: 496651923@qq.com
 */

namespace library;


class NetworkRequest
{
        /**
     * 发送一个GET请求
     *
     * @param string $url     请求URL
     * @param array  $params  请求参数
     * @param array  $options 扩展参数
	 * @param array  $header  请求header参数添加，示例：['token:token value','uid:1']
     *
     * @return mixed|string
     */
    public static function curl_get($url, $params = [], $options = [],$header=[]){
    	return self::sendRequest($url, $params, 'GET', $options,$header);
    }

    /**
     * 发送一个POST请求
     *
     * @param string $url     请求URL
     * @param array  $params  请求参数
     * @param array  $options 扩展参数
	 * @param array  $header  请求header参数添加，示例：['token:token value','uid:1']
     *
     * @return mixed|string
     */
    public static function curl_post($url, $params = [], $options = [],$header=[]){
    	return self::sendRequest($url, $params, 'POST', $options,$header);
    }


    /**
     * CURL发送Request请求,含POST和REQUEST.
     *
     * @param string $url     请求的链接
     * @param mixed  $params  传递的参数
     * @param string $method  请求的方法
     * @param mixed  $options CURL的参数
	 * @param array  $header  请求header参数添加
     *
     * @return array
     */
    public static function sendRequest($url, $params = [], $method = 'POST', $options = [],$header=[])
    {
        $method = strtoupper($method);
        $protocol = substr($url, 0, 5);
        $query_string = is_array($params) ? http_build_query($params) : $params;

        $ch = curl_init();
        $defaults = [];
        if ('GET' == $method) {
            $geturl = $query_string ? $url.(stripos($url, '?') !== false ? '&' : '?').$query_string : $url;
            $defaults[CURLOPT_URL] = $geturl;
        } else {
            $defaults[CURLOPT_URL] = $url;
            if ($method == 'POST') {
                $defaults[CURLOPT_POST] = 1;
            } else {
                $defaults[CURLOPT_CUSTOMREQUEST] = $method;
            }
            $defaults[CURLOPT_POSTFIELDS] = $query_string;
        }

        $defaults[CURLOPT_HEADER] = false;
        $defaults[CURLOPT_USERAGENT] = request()->header('user-agent');
        $defaults[CURLOPT_FOLLOWLOCATION] = true;
        $defaults[CURLOPT_RETURNTRANSFER] = true;
        //强制使用IPV4解析
        $defaults[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4;

        // disable 100-continue
		$merge_header=array_merge(['Expect:'],$header);
        curl_setopt($ch, CURLOPT_HTTPHEADER,$merge_header);

        if ('https' == $protocol) {
            $defaults[CURLOPT_SSL_VERIFYPEER] = false;
            $defaults[CURLOPT_SSL_VERIFYHOST] = false;
        }
        curl_setopt_array($ch, (array) $options + $defaults);

        $return = curl_exec($ch);
        curl_close($ch);
        return $return;
    }
}